package bit_operation;

class Demo20250509 {
    public int singleNumber(int[] nums) {
        // 把所有元素的每一个比特位相加 % 3
        int ret = 0;
        // 依次修改 ret 中的每一个比特位
        for (int i = 0; i < 32; i++) {
            int total = 0;
            // 统计 nums 中所有数的第 i 位的和
            for (int x : nums) {
                // 如果和为 1 ，total++；为 0 不需要++
                if (((x >> i) & 1) == 1) { // 说明这一位的比特位是 1
                    total++;
                }
            }
            total %= 3;
            // 将一个数的二进制位的第 x 位修改为 1 
            if (total == 1) {
                ret |= (1 << i);
            }
        }
        return ret;



        // Map<Integer, Integer> map = new HashMap<>();
        // for(int x : nums) {
        //     map.put(x, map.getOrDefault(x, 0) + 1);
        // }
        // int ret = 0;
        // for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
        //     int num = entry.getKey();
        //     int val = entry.getValue();
        //     if (val == 1) {
        //         ret = num;
        //         break;
        //     }
        // }
        // return ret;
    }
}